package chemtools_logica.LN.SFBean;

import chemtools_logica.BDL.IR.BDL_SFTipoproductoRemote;

import chemtools_logica.Beans.ContenedoresBean;
import chemtools_logica.Beans.FormulaBean;
import chemtools_logica.Beans.MedidaBean;
import chemtools_logica.Beans.OrdenproduccionBean;
import chemtools_logica.Beans.TipoinsumoBean;
import chemtools_logica.Beans.TipoproductoBean;

import chemtools_logica.Entidades.Contenedores;
import chemtools_logica.Entidades.Formula;

import chemtools_logica.Entidades.Graficoempresas;
import chemtools_logica.Entidades.Graficotipoinsumo;
import chemtools_logica.Entidades.Medida;
import chemtools_logica.Entidades.Tipoinsumo;
import chemtools_logica.Entidades.Tipoproducto;

import chemtools_logica.LN.IL.LN_SFTipoproductoLocal;
import chemtools_logica.LN.IR.LN_SFTipoproductoRemote;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import javax.ejb.EJB;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless(name = "LN_SFTipoproducto", mappedName = "map-LN_SFTipoproducto")
public class LN_SFTipoproductoBean implements LN_SFTipoproductoRemote, LN_SFTipoproductoLocal {
    @Resource
    SessionContext sessionContext;
    @PersistenceContext(unitName = "Chemtools_Logica")
    private EntityManager em;
    
    @EJB
    BDL_SFTipoproductoRemote bDL_SFTipoproductoRemote;

    public LN_SFTipoproductoBean() {
    }

    public List<TipoproductoBean> getAllTipoProducto() {
        List<Tipoproducto> listaEntidad = bDL_SFTipoproductoRemote.getTipoproductoFindAll();
        List<TipoproductoBean> listaBean = new ArrayList<TipoproductoBean>();
        
        for(Tipoproducto entidad : listaEntidad){
            TipoproductoBean bean = new TipoproductoBean();
            
            bean.setIdTipoProducto(entidad.getIdTipoProducto());
            bean.setDescripcion(entidad.getDescripcion());
            
            listaBean.add(bean);
        }
        return listaBean;
    }
    
    public List<TipoproductoBean> listaTipoProductoActivosSinFormula(){
        List<Tipoproducto> listaEntidad = bDL_SFTipoproductoRemote.tipoProductosSinFormulaActivos();
        
        List<TipoproductoBean> listaBean = changeListEntidadForBean(listaEntidad);
        
        return listaBean;
    }
    
    public List<TipoproductoBean> listaTipoProductoActivos(){
        List<Tipoproducto> listaEntidad = bDL_SFTipoproductoRemote.tipoProductosActivos();
        
        List<TipoproductoBean> listaBean = changeListEntidadForBean(listaEntidad);
        
        return listaBean;
    }
    
    public List<TipoproductoBean> listaTipoProductoActivosConMedida(){
        List<Tipoproducto> listaEntidad = bDL_SFTipoproductoRemote.tipoProductosActivosConMedida();
        
        List<TipoproductoBean> listaBean = changeListEntidadForBeanMedida(listaEntidad);
        
        return listaBean;
    }
    
    public List<TipoproductoBean> listaTipoProductoSinFormula(){
            List<Tipoproducto> listaEntidad = bDL_SFTipoproductoRemote.tipoProductosSinFormulaActivos();
            List<TipoproductoBean> listaBean = changeListEntidadForBean(listaEntidad);
            return listaBean;
        }
    
    public TipoproductoBean buscaxIdTipoproducto(int idTipoproducto){
        return entidadxBean(bDL_SFTipoproductoRemote.buscaxIdTipoproducto(idTipoproducto));
        }
    
    public void inserttProducto(TipoproductoBean bean){
        Tipoproducto entidad = new Tipoproducto();
        entidad = this.convertBeantoEntity(bean);  
        bDL_SFTipoproductoRemote.persistTipoproducto(entidad);
    }
    
    public List<Graficotipoinsumo> getChartTipoProducto(String idAlmacen, Date fechaMin, Date fechaMax){
        List<Graficotipoinsumo> listaGrafico = bDL_SFTipoproductoRemote.getCharTipoProducto(idAlmacen, fechaMin, fechaMax);
        return listaGrafico;
    }
    
    public List<Graficoempresas> getChartTipoProductoEmpresa(Date fechaMin, Date fechaMax){
        List<Graficoempresas> listaGrafico = bDL_SFTipoproductoRemote.getChartTProductoEmpresas(fechaMin, fechaMax);
        return listaGrafico;
    }
    
    public TipoproductoBean getInfoTipoProducto(String idTProducto){
        TipoproductoBean bean = new TipoproductoBean();
        Tipoproducto entidad =  bDL_SFTipoproductoRemote.getDetalleTProducto(idTProducto);
        
        bean.setUMedida(entidad.getMedida().getDescripcion());
        bean.setContenedor(entidad.getContenedores().getDescripcion());
        
        return bean;
    }
    
    public Tipoproducto convertBeantoEntity(TipoproductoBean bean){
        Tipoproducto entidad = new Tipoproducto();
        Contenedores contenedorEntidad = new Contenedores();
        Medida medidaEntidad = new Medida();
        
        entidad.setDescripcion(bean.getDescripcion());
        entidad.setComentario(bean.getComentario());
        entidad.setEstado(1);
        entidad.setTemperatura_Minima(bean.getTemperatura_Minima());
        entidad.setTemperatura_Maxima(bean.getTemperatura_Maxima());
        entidad.setTiempo_Expiracion(bean.getTiempo_Expiracion());
        
            contenedorEntidad.setIdContenedores(bean.getIdContenedor());
            entidad.setContenedores(contenedorEntidad);
            
            medidaEntidad.setIdMedida(bean.getIdUMedida());
            entidad.setMedida(medidaEntidad);
        
        return entidad;
    }
    
    public List<TipoproductoBean> changeListEntidadForBean(List<Tipoproducto> tipoProductoEntidad){
            List<TipoproductoBean> tipoProductoabean = new ArrayList<TipoproductoBean>();
           // System.out.println(tipoProductoEntidad);
            for(Tipoproducto entidad:tipoProductoEntidad){
                    TipoproductoBean bean=new TipoproductoBean();
                    bean.setDescripcion(entidad.getDescripcion());
                    bean.setIdTipoProducto(entidad.getIdTipoProducto());
                    bean.setEstado(entidad.getEstado());
                    bean.setTemperatura_Minima(entidad.getTemperatura_Minima());
                    bean.setTemperatura_Maxima(entidad.getTemperatura_Maxima());
                    bean.setUMedida(entidad.getMedida().getDescripcion());
                    tipoProductoabean.add(bean);
                }
            return tipoProductoabean;
        
        }

    
    public double getSumaProductosByTipo(int idTipoProducto){
        double cantidad = bDL_SFTipoproductoRemote.getSumaContenidoProd(idTipoProducto);
        return cantidad;
    }

    private TipoproductoBean entidadxBean(Tipoproducto entidad){
            TipoproductoBean bean=new TipoproductoBean();
            bean.setIdTipoProducto(entidad.getIdTipoProducto());
            bean.setContenedores(new ContenedoresBean());
            bean.getContenedores().setIdContenedores(entidad.getContenedores().getIdContenedores());
            bean.setMedida(new MedidaBean());
            bean.getMedida().setIdMedida(entidad.getMedida().getIdMedida());
            bean.setDescripcion(entidad.getDescripcion());
            bean.setEstado(entidad.getEstado());
            bean.setComentario(entidad.getComentario());
            bean.setTemperatura_Minima(entidad.getTemperatura_Minima());
            bean.setTemperatura_Maxima(entidad.getTemperatura_Maxima());
            bean.setTiempo_Expiracion(entidad.getTiempo_Expiracion());
            return bean;
        }
    
    public List<TipoproductoBean> getTipodeProductoxOrdenProd(OrdenproduccionBean bean){
            List<Tipoproducto> listaEntidad = bDL_SFTipoproductoRemote.tipoProductoxOrdenProduccion(bean.getIdOrdenProduccion());
            List<TipoproductoBean> listaBean = new ArrayList<TipoproductoBean>();
            listaBean=changeListEntidadForBean(listaEntidad);
            return listaBean;
    }
    
    public List<TipoproductoBean> getTipodeProductoxOrdenProdConMedida(OrdenproduccionBean bean){
            List<Tipoproducto> listaEntidad = bDL_SFTipoproductoRemote.tipoProductoxOrdenProduccionConMedida(bean.getIdOrdenProduccion());
            List<TipoproductoBean> listaBean = new ArrayList<TipoproductoBean>();
            listaBean=changeListEntidadForBeanMedida(listaEntidad);
            return listaBean;
    }
    
    public List<TipoproductoBean> changeListEntidadForBeanMedida(List<Tipoproducto> tipoProductoEntidad){
            List<TipoproductoBean> tipoProductoabean = new ArrayList<TipoproductoBean>();
           // System.out.println(tipoProductoEntidad);
            for(Tipoproducto entidad:tipoProductoEntidad){
                    TipoproductoBean bean=new TipoproductoBean();
                    bean.setDescripcion(entidad.getDescripcion());
                    bean.setIdTipoProducto(entidad.getIdTipoProducto());
                    bean.setEstado(entidad.getEstado());
                    bean.setTemperatura_Minima(entidad.getTemperatura_Minima());
                    bean.setTemperatura_Maxima(entidad.getTemperatura_Maxima());
                    bean.setNombreMedida(entidad.getMedida().getDescripcion());
                    bean.setNombreContenedor(entidad.getContenedores().getDescripcion());
                    bean.setUMedida(entidad.getMedida().getDescripcion());
                    bean.setContenedor(entidad.getContenedores().getDescripcion());
                    tipoProductoabean.add(bean);
                }
            return tipoProductoabean;
        
        }
    
}
